/* *
* 策略模式是一种行为型设计模式，它定义了一系列的算法，并将每个算法都封装在单独的类中，从而使得它们可以互相替换。
* 策略模式使得算法可以独立于客户端而变化，也就是说，客户端可以基于不同的算法来选择不同的策略，而不需要改变客户端代码。
* 在策略模式中，有三个主要角色：
* 环境（Context）：负责维护一个指向策略对象的引用，同时负责向客户端提供可以选择的算法。
* 抽象策略（Strategy）：定义了所有具体策略的接口。
* 具体策略（Concrete Strategy）：实现了抽象策略的接口，并提供了具体的算法逻辑。
*       环境
*      抽象策略
* 具体策略1 具体策略2 ...
* 环境选择抽象策略 抽象策略包含了多种具体策略
* */
//? 定义一系列算法(抽象策略)
let strategies = {
    //? 实现了抽象策略的接口，并提供了具体的算法逻辑(两个具体策略)
    add: function (num) {
        return num + num;
    },
    multiply: function (num) {
        return num * num;
    },
};
//?  calculateBonus 函数承担了环境的角色，它根据传入的策略名称（即算法名称）来选择并执行相应的策略函数
let calculateBonus = function (strategy, num) {
    return strategies[strategy](num);
};
console.log(calculateBonus("add", 3));
console.log(calculateBonus("multiply", 3));
